package fr.uniscol;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import fr.uniscol.editors.UserModelPropertyEditor;
import fr.uniscol.model.DefaultUser;
import fr.uniscol.model.IUniscolUser;
import fr.uniscol.mvc.SessionExpireeException;
import fr.uniscol.service.IUtilisateurService;

@Controller
public class UsersController extends UniscolMainController {

	public static final Logger log = Logger.getLogger(UsersController.class);
	
	@Autowired
	private IUtilisateurService utilisateurService;
	
	@InitBinder
	protected void initBinder(HttpServletRequest request, WebDataBinder binder){
		//binder.registerCustomEditor(UserModel.class, new UserModelPropertyEditor());
	}
	
	@RequestMapping("/users")
	public ModelAndView users(HttpSession session){
		
		// Tous les users de l'établissement
		List<DefaultUser> utilisateurs = utilisateurService.getAllUtilisateurOfEtablissement(getUtilisateur(session).getBaseSelectionnee());
		
		return new ModelAndView("users", "utilisateurs", utilisateurs);
	}
	
	@RequestMapping("/user")
	public ModelAndView editUser(@RequestParam("id") Integer userId, HttpSession session){
		
		IUniscolUser utilisateur = null;
		
		log.info("USERID: " + userId);
		
		if(userId > 0){
			// Modification
			utilisateur = utilisateurService.getUtilisateurById(userId);
			
		}else{
			// Création
			utilisateur = new DefaultUser();
		}
		
		return new ModelAndView("forms/utilisateurForm", "utilisateur", utilisateur);
	}
	
	@RequestMapping(value="/user.save")
	@ResponseBody
	public String saveUser(@ModelAttribute DefaultUser utilisateur, BindingResult results, HttpSession session){
		
		log.info("SAVE: " + utilisateur);
		 
		String ret = "";
		if(utilisateurService.saveUser(utilisateur)){
			ret = "OK";
		}else{
			ret = "NOK";
		}
		return ret;
	}
	
	@RequestMapping("/user.delete")
	public ModelAndView deleteUser(@RequestParam("id") int userId, HttpSession session){
		
		log.info("DELETE USER " + userId);
		
		DefaultUser user = new DefaultUser();
		user.setId(userId);
		
		boolean ret = utilisateurService.deleteUser(user);
		
		return users(session);
	}
}
